package fiuba.algo3.gpschallenge.gui;

import javax.swing.JPanel;
import javax.swing.JLabel;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.SystemColor;

import javax.swing.SwingConstants;
import javax.swing.JTextField;
import javax.swing.JButton;

import fiuba.algo3.gpschallenge.Controlador.Controlador;
import fiuba.algo3.gpschallenge.modelo.Juego;
import fiuba.algo3.gpschallenge.modelo.Jugador;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class PanelCrearJugador extends JPanel {
	private Agregable interfazAgregable;
	private JTextField campoNombreJugador;
	//private JTextField campoNombreIngresadoValido;
	private Controlador control;
	private Juego modelo;
	private final int ALTO = 450;
	private final int ANCHO = 700;

	
	public PanelCrearJugador(Agregable interfazM, Juego modelo, Controlador control) {
		interfazAgregable = interfazM;
		this.modelo = modelo;
		this.control = control;
		setPreferredSize(new Dimension(ANCHO, ALTO));
		requestFocus();

		setLayout(null);
		JLabel etiquetaCrearUsuario = new JLabel("Crear Jugador");
		etiquetaCrearUsuario.setHorizontalAlignment(SwingConstants.CENTER);
		etiquetaCrearUsuario.setFont(new Font("Times New Roman", Font.BOLD, 38));
		etiquetaCrearUsuario.setBounds(164, 52, 312, 41);
		add(etiquetaCrearUsuario);
		
		JLabel etiquetaNombreDeJugador = new JLabel("Nombre de Jugador");
		etiquetaNombreDeJugador.setHorizontalAlignment(SwingConstants.CENTER);
		etiquetaNombreDeJugador.setFont(new Font("Times New Roman", Font.BOLD, 15));
		etiquetaNombreDeJugador.setBounds(174, 120, 141, 25);
		add(etiquetaNombreDeJugador);
		
		campoNombreJugador = new JTextField();
		campoNombreJugador.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				int teclaPresionada = e.getKeyCode();
				if (teclaPresionada == KeyEvent.VK_ENTER){
					setearNombreYCargarMenuDeJugador();
					
				}
			}
		});
		campoNombreJugador.setBounds(352, 123, 148, 21);
		add(campoNombreJugador);
		campoNombreJugador.requestFocus();
		campoNombreJugador.setColumns(1);
		
		JButton botonOk = new JButton("OK");
		botonOk.setBackground(SystemColor.activeCaption);
		botonOk.setForeground(SystemColor.window);
		botonOk.setFont(new Font("Arial Black", Font.BOLD, 12));
		//se inicializa el juego nuevo
		modelo.jugadorNuevo();
		modelo.inicializarJuego();
		botonOk.addActionListener(new ActionListener() {
		
			public void actionPerformed(ActionEvent e){
				setearNombreYCargarMenuDeJugador();
				
			}
		});
		botonOk.setBounds(378, 267, 141, 47);
		add(botonOk);
		
		JButton botonAtras = new JButton("Atras");
		botonAtras.setBackground(SystemColor.activeCaption);
		botonAtras.setForeground(SystemColor.window);
		botonAtras.setFont(new Font("Arial Black", Font.BOLD, 12));
		botonAtras.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				cargarPanelInicial();
			}
		});
		botonAtras.setBounds(149, 267, 134, 47);
		add(botonAtras);
		
	}
	
	
	
	private void setearNombreDeJugador() {
		this.modelo.setNombreJugador(campoNombreJugador.getText());
		this.modelo.getpuntosDeJugador().setNombreJugador(campoNombreJugador.getText());
	}

	private void cargarPanelInicial() {
		PanelInicial panelInicial = new PanelInicial(this.interfazAgregable, modelo, control);
		interfazAgregable.limpiarVentana();
		interfazAgregable.agregarComponente(panelInicial, BorderLayout.CENTER);
		
	}

	private void cargarMenuDeUsuario() {
		interfazAgregable.limpiarVentana();
		
		PanelMenuDeUsuario menuDeUsuario = new PanelMenuDeUsuario(this.interfazAgregable, this.modelo, this.control);
		PanelSuperiorMenuUsuario panelSuperiorMenu = new PanelSuperiorMenuUsuario(this.interfazAgregable, this.modelo, this.control);
		
		interfazAgregable.agregarComponente(panelSuperiorMenu, BorderLayout.NORTH);
		interfazAgregable.agregarComponente(menuDeUsuario, BorderLayout.CENTER);	
	}
	
	private void setearNombreYCargarMenuDeJugador(){
		
		if ((campoNombreJugador.getText().length() != 0)&(!(this.modelo.getRanking().nombreYaExisteEnElRanking(campoNombreJugador.getText())))){
			setearNombreDeJugador();
			cargarMenuDeUsuario();	
		}
		else {
			JLabel lblElUsuarioYa = new JLabel("El usuario Ya Existe");
			lblElUsuarioYa.setHorizontalAlignment(SwingConstants.CENTER);
			lblElUsuarioYa.setFont(new Font("Times New Roman", Font.BOLD, 15));
			lblElUsuarioYa.setForeground(Color.red);
			lblElUsuarioYa.setBounds(252, 171, 141, 25);
			lblElUsuarioYa.setVisible(true);
			add(lblElUsuarioYa);
			repaint();
		}
		
	}
}